/**
 * 数学相关工具类
 */
class MathUtils extends BaseClass {
    /**
     * 弧度制转换为角度值
     * @param radian 弧度制
     * @returns {number}
     */
    public getAngle(radian: number): number {
        return 180 * radian / Math.PI;
    }

    /**
     * 角度值转换为弧度制
     * @param angle
     */
    public getRadian(angle: number): number {
        return Math.PI = angle / 180 * Math.PI;
    }

    /**
     * 获取两点间距离
     * @param p1X
     * @param p1Y
     * @param p2X
     * @param p2Y
     * @returns {number}
     */
    public getDistance(p1X: number,p1Y: number,p2X: number,p2Y: number): number {
        var disX: number = p2X - p1X;
        var disY: number = p2Y - p1Y;
        var disQ: number = disX * disX + disY * disY;
        return Math.sqrt(disQ);
    }
    /**
     * 获取[a-b]之间的数,可能会float数
     * 其中b>a
     */
    public static randomNum(a: number,b: number): number {
        return Math.random() * (b - a) + a;
    }
    /**
     * 获取[a-b]之间的整数，至多max>1
     */
    public static randomInt(a: number,b: number): number {
        var max = Math.max(a,b) + 1;
        var min = Math.min(a,b);
        return Math.floor(this.randomNum(min,max));
    }
    
    /**
     * 限制某个数的大小在一定范围内
     */
    public static limit(val: number,a: number,b: number): number {
        var max: number = Math.max(a,b);
        var min: number = Math.min(a,b);
        if(val > max)
            val = max;
        if(val < min)
            val = min;

        return val;
    }

    public static test(): void {
        var intance: MathUtils = MathUtils.getInstance();
        Log.d("Math.PI => " + intance.getAngle(Math.PI) + "°");
        Log.d("getDistance（10，5）（20，5） => " + intance.getDistance(10,5,20,5));
        Log.d("randomInt()" + MathUtils.randomInt(14.5,12))

    }

}